"use strict";
// 断言
// 写法1  值 as 类型
// 写法2  <类型> 值
function fn(num) {
    // 把返回值断言成字符串   断言：就是你比你的程序更早知道你传入的是什么类型
    // 不能随便断言 
    // return (<string>num).length
    return num.length;
}
console.log(fn('123'));
// 用联合类型约束我们对象
let animal = {
    name: '蓝猫',
    sex: '男',
    run() {
        console.log('猫在地上跑');
    },
    swim() {
        console.log('鱼在水里游');
    },
    eat() {
        console.log('吃');
    }
};
console.log(animal.name);
// animal.eat()
// 当我们访问联合类型上不同的属性或者方法时，我们可以使用断言  
// 如果想要访问run方法 把它断言成 ICat，如果想要访问swim方法，把它断言成IFish
animal.run();
animal.swim();
// 注意事项
// 类型断言只能够「欺骗」TypeScript 编译器，无法避免运行时的错误，反而滥用类型断言可能会导致运行时错误
// 约束函数
// 如果没有约束函数返回值类型 他默认是any（任意类型）类型
function fun(a, b) {
    return a + b;
}
console.log(fun(1, 2));
var fn1 = function (x, y) {
    return x + y;
};
console.log(fn1(1, 2));
let add = function (a, b, c) {
    return a + b + c;
};
console.log(add(1, 2, 3));
